home *** CD-ROM | disk | FTP | other *** search
/ Amiga Games: Greatest Hits 1996 / Amiga Games: Greatest Hits 1996.iso / userbox / publicdomain / superplay-lib_dev / programmers / example_spobjects / st / sp_asmpart.a < prev    next >
Encoding:
Text File  |  1996-05-27  |  7.0 KB  |  237 lines

  1. ; * ************************************************************************ *
  2. ; * Module           : SP_AsmPart.a                                          *
  3. ; * Version          : V4.5 - V2                                             *
  4. ; * Last updated     : 27.05.1996                                            *
  5. ; * Includes         : NDUK V40 asm includes                                 *
  6. ; * Compiler         : SAS/C V6.56 (ASM)                                     *
  7. ; * Compiler-Options : (smakefile)                                           *
  8. ; * ************************************************************************ *
  9.  
  10.   INCLUDE "exec/types.i"
  11.   INCLUDE "exec/execbase.i"
  12.   INCLUDE "exec/initializers.i"
  13.   INCLUDE "exec/libraries.i"
  14.   INCLUDE "exec/resident.i"
  15.   INCLUDE "exec/funcdef.i"
  16.   INCLUDE "exec/exec_lib.i"
  17.  
  18.   XREF _LinkerDB
  19.  
  20.  
  21.   XREF _SPLI_InitSPOList          ; library-internal initialization function
  22.   XREF _SPLI_OpenLibs
  23.   XREF _SPLI_CloseLibs
  24.   XREF _SysBase
  25.   XREF _DataTab
  26.  
  27.   XREF _SPO_AllocHandle
  28.   XREF _SPO_FreeHandle
  29.  
  30.   XREF _SPO_StartReplay
  31.   XREF _SPO_Read
  32.   XREF _SPO_Write
  33.   XREF _SPO_StopReplay
  34.   XREF _SPO_FreeResources
  35.   XREF _SPO_SetAccessMode
  36.   XREF _SPO_SetWriteSubType
  37.   XREF _SPO_SetWriteName
  38.   XREF _SPO_SetReadName
  39.   XREF _SPO_FileInfoRequest
  40.   XREF _SPO_CheckFileType
  41.   XREF _SPO_SetReqIOWindow
  42.   XREF _SPO_ContinueReplay
  43.   XREF _SPO_FastForward
  44.   XREF _SPO_FastBackward
  45.   XREF _SPO_GetSampleBuffer
  46.   XREF _SPO_GetSampleInfo
  47.   XREF _SPO_GetSampleList         ; added in V2
  48.   XREF _SPO_SetSampleList
  49.  
  50.  
  51.   STRUCTURE SPObjectBase,0
  52.    STRUCT svb_LibNode,LIB_SIZE
  53.    ULONG  svb_SPObject
  54.  
  55.    ULONG  svb_Reserved,32
  56.  
  57.    ULONG  svb_SegList       ; private part of Base Data
  58.    ULONG  svb_SysBase
  59.    ULONG  svb_DOSBase
  60.    ULONG  svb_IntuitionBase
  61.    ULONG  svb_IFFParseBase
  62.   LABEL  svb_SIZEOF
  63.  
  64.   SECTION svb_lib,CODE
  65. ;-------------- `Notausgang` ------------------------------------------------
  66. Start:  moveq #0,d0
  67.         rts
  68.  
  69. ;-------------- Funktionstabellen fuer InitStruct u.a. ----------------------
  70. _InitTab:
  71.          dc.l svb_SIZEOF      ; LibBase-Size
  72.          dc.l FuncTab         ; Function-Table begin
  73.          dc.l _DataTab        ; Data-Table begin
  74.          dc.l InitLib         ; ptr to InitLib
  75. FuncTab:
  76.          dc.l OpenLib         ; internal functions
  77.          dc.l CloseLib
  78.          dc.l ExpungeLib
  79.          dc.l ExtFuncLib
  80.  
  81.          dc.l _SPO_AllocHandle
  82.          dc.l _SPO_FreeHandle
  83.          dc.l _SPO_Read
  84.          dc.l _SPO_StartReplay
  85.          dc.l _SPO_Write
  86.          dc.l _SPO_StopReplay
  87.          dc.l _SPO_FreeResources
  88.          dc.l _SPO_SetAccessMode
  89.          dc.l _SPO_SetWriteSubType
  90.          dc.l _SPO_SetWriteName
  91.          dc.l _SPO_SetReadName
  92.          dc.l _SPO_FileInfoRequest
  93.          dc.l _SPO_CheckFileType
  94.          dc.l _SPO_SetReqIOWindow
  95.          dc.l _SPO_ContinueReplay
  96.          dc.l _SPO_FastForward
  97.          dc.l _SPO_FastBackward
  98.          dc.l _SPO_GetSampleBuffer
  99.          dc.l _SPO_GetSampleInfo
  100.          dc.l _SPO_GetSampleList         ; added in V2
  101.          dc.l _SPO_SetSampleList
  102.  
  103.          dc.l -1
  104.  
  105. ;-------------- InitLib (Initialisieren der Library) ---------------------------
  106. ;        A0 : &SegList
  107. ;        A6 : &SysBase
  108. ;        D0 : &SVLibrary
  109.  
  110. InitLib:
  111.           movem.l a1/a4-a5,-(sp)       ; a4 und a5 auf Stack retten
  112.  
  113.       lea     _LinkerDB,a4        ; _LinkerDB  -> A4
  114.       move.l d0,a5            ; &SVLibrary -> A5
  115.  
  116.       move.l a6,svb_SysBase(a5)  ; &SysBase   -> SVLibrary.svb_SysBase
  117.       move.l a0,svb_SegList(a5)  ; &SegList   -> SVLibrary.svb_SegList
  118.       move.l a5,_SPObjectBase    ; save Base Address for internal use
  119.  
  120.           jsr _SPLI_OpenLibs
  121.           
  122.           tst.l d0
  123.           beq InitLib_Fail
  124.  
  125.           jsr _SPLI_InitSPOList
  126.  
  127.       move.l a5,d0                    ; return &SPObjectBase
  128.  
  129.           jmp InitLib_RTS
  130.  
  131. InitLib_Fail:
  132.  
  133.           jsr _SPLI_CloseLibs
  134.       moveq #0,d0                ; NULL !
  135.  
  136. InitLib_RTS:
  137.  
  138.           movem.l (sp)+,a1/a4-a5
  139.           rts
  140.  
  141.  
  142. ;-------------- OpenLib (Oeffnen der Library) ----------------------------------
  143. OpenLib:
  144.                 addq.w #1,LIB_OPENCNT(a6)          ; LIB_OPENCNT ++
  145.                 bclr   #LIBB_DELEXP,LIB_FLAGS(a6)  ; clear LIBF_DELEXP
  146.                 move.l a6,d0                       ; return &SPObjectBase
  147.  
  148.                 rts
  149.  
  150. ;-------------- CloseLib (Schliessen der Library) ------------------------------
  151. CloseLib:
  152.                 moveq #0,d0
  153.                 subq.w #1,LIB_OPENCNT(a6)          ; LIB_OPENCNT --
  154.                 bne.s EndCloseLib                  ; wenn nicht null, Abbruch
  155.                 btst #LIBB_DELEXP,LIB_FLAGS(a6)    ; Test auf LIBF_DELEXP
  156.                 beq.s EndCloseLib                  ; wenn Null, Abbruch
  157.                 bsr.s ExpungeLib                   ; wenn gesetzt, ExpungeLib
  158. EndCloseLib:
  159.                 rts
  160.  
  161. ;-------------- ExpungeLib (Entfernen der Library) ----------------------------
  162. ExpungeLib:
  163.                 movem.l d2/a1/a5-a6,-(sp)
  164.  
  165.                 move.l a6,a5                       ; &SVLibrary retten
  166.                 move.l _SysBase,a6                 ; ExecBase to A6
  167.                 tst.w LIB_OPENCNT(a5)              ; test LIB_OPENCNT
  168.                 beq.s NoOpenLib                    ; ...
  169.                 bset #LIBB_DELEXP,LIB_FLAGS(a5)    ; set LIBF_DELEXP flag
  170.                 moveq #0,d0                        ; Ptr auf Segmentliste
  171.                 bra.w ExpungeLibEnd                ;
  172. NoOpenLib:
  173.                 move.l svb_SegList(a5),d2           ; SegList retten
  174.  
  175.                 move.l a5,a1                       ; &SVLibrary nach A1 (Par.)
  176.                 jsr _LVORemove(a6)                 ; Library-Node entfernen
  177.  
  178.                 jsr _SPLI_CloseLibs
  179.  
  180.                 moveq  #0,d0                       ; D0 loeschen
  181.                 move.l a5,a1                       ; &SVLibrary nach A1 (Par.)
  182.                 move.w LIB_NEGSIZE(a5),d0          ; Groesse der
  183.                 sub.l d0,a1                        ; Library
  184.                 add.w LIB_POSSIZE(a5),d0           ; ermitteln !!!
  185.  
  186.                 jsr _LVOFreeMem(a6)                ; Speicher freigeben
  187.                 move.l d2,d0                       ; &SegList zurueckgeben
  188. ExpungeLibEnd:
  189.                 movem.l (sp)+,d2/a1/a5-a6
  190.                 rts
  191.  
  192. ;-------------- ExtFuncLib (bis einschl. OS V2.04 unbenutzt) ---------------
  193. ExtFuncLib:
  194.  
  195.                 moveq #0,d0          ; Ist nie falsch ........ - oder ?
  196.                 rts
  197.  
  198. ;-------------- Eigene Funktionen ------------------------------------------
  199.  
  200.   SECTION __MERGED,BSS
  201.  
  202. _SPObjectBase:  ds.l 1
  203.  
  204. _XCEXIT:        ds.l 1    ; dummy-values to get the compiler's libs work :
  205. __XCEXIT:       ds.l 1
  206. _ONBREAK:       ds.l 1
  207. __ONBREAK:      ds.l 1
  208. __base:         ds.l 1
  209. ___base:        ds.l 1
  210. _ProgramName:   ds.l 1
  211. __ProgramName:  ds.l 1
  212. _StackPtr:      ds.l 1
  213. __StackPtr:     ds.l 1
  214. _oserr:         ds.l 1
  215. __oserr:        ds.l 1
  216. _OSERR:         ds.l 1
  217. __OSERR:        ds.l 1
  218.  
  219.   XDEF _SPObjectBase
  220.   XDEF _InitTab 
  221.  
  222.   XDEF _XCEXIT
  223.   XDEF __XCEXIT
  224.   XDEF _ONBREAK
  225.   XDEF __ONBREAK
  226.   XDEF __base
  227.   XDEF ___base
  228.   XDEF _ProgramName
  229.   XDEF __ProgramName
  230.   XDEF _StackPtr
  231.   XDEF __StackPtr
  232.   XDEF _oserr
  233.   XDEF __oserr
  234.   XDEF _OSERR
  235.   XDEF __OSERR
  236.                 END
  237.